//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS CloudDirectory service.
///
/// Amazon Cloud Directory Amazon Cloud Directory is a component of the AWS Directory Service that simplifies the development and management of cloud-scale web, mobile, and IoT applications. This guide describes the Cloud Directory operations that you can call programmatically and includes detailed information on data types and errors. For information about Cloud Directory features, see AWS Directory Service and the Amazon Cloud Directory Developer Guide.
public struct CloudDirectory: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the CloudDirectory client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            serviceName: "CloudDirectory",
            serviceIdentifier: "clouddirectory",
            serviceProtocol: .restjson,
            apiVersion: "2017-01-11",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: CloudDirectoryErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "us-gov-west-1": "clouddirectory.us-gov-west-1.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Adds a new Facet to an object. An object can have more than one facet applied on it.
    @Sendable
    @inlinable
    public func addFacetToObject(_ input: AddFacetToObjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AddFacetToObjectResponse {
        try await self.client.execute(
            operation: "AddFacetToObject", 
            path: "/amazonclouddirectory/2017-01-11/object/facets", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds a new Facet to an object. An object can have more than one facet applied on it.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - objectAttributeList: Attributes on the facet that you are adding to the object.
    ///   - objectReference: A reference to the object you are adding the specified facet to.
    ///   - schemaFacet: Identifiers for the facet that you are adding to the object. See SchemaFacet for details.
    ///   - logger: Logger use during operation
    @inlinable
    public func addFacetToObject(
        directoryArn: String,
        objectAttributeList: [AttributeKeyAndValue]? = nil,
        objectReference: ObjectReference,
        schemaFacet: SchemaFacet,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AddFacetToObjectResponse {
        let input = AddFacetToObjectRequest(
            directoryArn: directoryArn, 
            objectAttributeList: objectAttributeList, 
            objectReference: objectReference, 
            schemaFacet: schemaFacet
        )
        return try await self.addFacetToObject(input, logger: logger)
    }

    /// Copies the input published schema, at the specified version, into the Directory with the same name and version as that of the published schema.
    @Sendable
    @inlinable
    public func applySchema(_ input: ApplySchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ApplySchemaResponse {
        try await self.client.execute(
            operation: "ApplySchema", 
            path: "/amazonclouddirectory/2017-01-11/schema/apply", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Copies the input published schema, at the specified version, into the Directory with the same name and version as that of the published schema.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory into which the schema is copied. For more information, see arns.
    ///   - publishedSchemaArn: Published schema Amazon Resource Name (ARN) that needs to be copied. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func applySchema(
        directoryArn: String,
        publishedSchemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ApplySchemaResponse {
        let input = ApplySchemaRequest(
            directoryArn: directoryArn, 
            publishedSchemaArn: publishedSchemaArn
        )
        return try await self.applySchema(input, logger: logger)
    }

    /// Attaches an existing object to another object. An object can be accessed in two ways:   Using the path   Using ObjectIdentifier
    @Sendable
    @inlinable
    public func attachObject(_ input: AttachObjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachObjectResponse {
        try await self.client.execute(
            operation: "AttachObject", 
            path: "/amazonclouddirectory/2017-01-11/object/attach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches an existing object to another object. An object can be accessed in two ways:   Using the path   Using ObjectIdentifier
    ///
    /// Parameters:
    ///   - childReference: The child object reference to be attached to the object.
    ///   - directoryArn: Amazon Resource Name (ARN) that is associated with the Directory where both objects reside. For more information, see arns.
    ///   - linkName: The link name with which the child object is attached to the parent.
    ///   - parentReference: The parent object reference.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachObject(
        childReference: ObjectReference,
        directoryArn: String,
        linkName: String,
        parentReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachObjectResponse {
        let input = AttachObjectRequest(
            childReference: childReference, 
            directoryArn: directoryArn, 
            linkName: linkName, 
            parentReference: parentReference
        )
        return try await self.attachObject(input, logger: logger)
    }

    /// Attaches a policy object to a regular object. An object can have a limited number of attached policies.
    @Sendable
    @inlinable
    public func attachPolicy(_ input: AttachPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachPolicyResponse {
        try await self.client.execute(
            operation: "AttachPolicy", 
            path: "/amazonclouddirectory/2017-01-11/policy/attach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches a policy object to a regular object. An object can have a limited number of attached policies.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where both objects reside. For more information, see arns.
    ///   - objectReference: The reference that identifies the object to which the policy will be attached.
    ///   - policyReference: The reference that is associated with the policy object.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachPolicy(
        directoryArn: String,
        objectReference: ObjectReference,
        policyReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachPolicyResponse {
        let input = AttachPolicyRequest(
            directoryArn: directoryArn, 
            objectReference: objectReference, 
            policyReference: policyReference
        )
        return try await self.attachPolicy(input, logger: logger)
    }

    /// Attaches the specified object to the specified index.
    @Sendable
    @inlinable
    public func attachToIndex(_ input: AttachToIndexRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachToIndexResponse {
        try await self.client.execute(
            operation: "AttachToIndex", 
            path: "/amazonclouddirectory/2017-01-11/index/attach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches the specified object to the specified index.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) of the directory where the object and index exist.
    ///   - indexReference: A reference to the index that you are attaching the object to.
    ///   - targetReference: A reference to the object that you are attaching to the index.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachToIndex(
        directoryArn: String,
        indexReference: ObjectReference,
        targetReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachToIndexResponse {
        let input = AttachToIndexRequest(
            directoryArn: directoryArn, 
            indexReference: indexReference, 
            targetReference: targetReference
        )
        return try await self.attachToIndex(input, logger: logger)
    }

    /// Attaches a typed link to a specified source and target object. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func attachTypedLink(_ input: AttachTypedLinkRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachTypedLinkResponse {
        try await self.client.execute(
            operation: "AttachTypedLink", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/attach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches a typed link to a specified source and target object. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - attributes: A set of attributes that are associated with the typed link.
    ///   - directoryArn: The Amazon Resource Name (ARN) of the directory where you want to attach the typed link.
    ///   - sourceObjectReference: Identifies the source object that the typed link will attach to.
    ///   - targetObjectReference: Identifies the target object that the typed link will attach to.
    ///   - typedLinkFacet: Identifies the typed link facet that is associated with the typed link.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachTypedLink(
        attributes: [AttributeNameAndValue],
        directoryArn: String,
        sourceObjectReference: ObjectReference,
        targetObjectReference: ObjectReference,
        typedLinkFacet: TypedLinkSchemaAndFacetName,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachTypedLinkResponse {
        let input = AttachTypedLinkRequest(
            attributes: attributes, 
            directoryArn: directoryArn, 
            sourceObjectReference: sourceObjectReference, 
            targetObjectReference: targetObjectReference, 
            typedLinkFacet: typedLinkFacet
        )
        return try await self.attachTypedLink(input, logger: logger)
    }

    /// Performs all the read operations in a batch.
    @Sendable
    @inlinable
    public func batchRead(_ input: BatchReadRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchReadResponse {
        try await self.client.execute(
            operation: "BatchRead", 
            path: "/amazonclouddirectory/2017-01-11/batchread", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Performs all the read operations in a batch.
    ///
    /// Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
    ///   - operations: A list of operations that are part of the batch.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchRead(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        operations: [BatchReadOperation],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchReadResponse {
        let input = BatchReadRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            operations: operations
        )
        return try await self.batchRead(input, logger: logger)
    }

    /// Performs all the write operations in a batch. Either all the operations succeed or none.
    @Sendable
    @inlinable
    public func batchWrite(_ input: BatchWriteRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchWriteResponse {
        try await self.client.execute(
            operation: "BatchWrite", 
            path: "/amazonclouddirectory/2017-01-11/batchwrite", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Performs all the write operations in a batch. Either all the operations succeed or none.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
    ///   - operations: A list of operations that are part of the batch.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchWrite(
        directoryArn: String,
        operations: [BatchWriteOperation],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchWriteResponse {
        let input = BatchWriteRequest(
            directoryArn: directoryArn, 
            operations: operations
        )
        return try await self.batchWrite(input, logger: logger)
    }

    /// Creates a Directory by copying the published schema into the directory. A directory cannot be created without a schema. You can also quickly create a directory using a managed schema, called the QuickStartSchema. For more information, see Managed Schema in the Amazon Cloud Directory Developer Guide.
    @Sendable
    @inlinable
    public func createDirectory(_ input: CreateDirectoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDirectoryResponse {
        try await self.client.execute(
            operation: "CreateDirectory", 
            path: "/amazonclouddirectory/2017-01-11/directory/create", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Directory by copying the published schema into the directory. A directory cannot be created without a schema. You can also quickly create a directory using a managed schema, called the QuickStartSchema. For more information, see Managed Schema in the Amazon Cloud Directory Developer Guide.
    ///
    /// Parameters:
    ///   - name: The name of the Directory. Should be unique per account, per region.
    ///   - schemaArn: The Amazon Resource Name (ARN) of the published schema that will be copied into the data Directory. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDirectory(
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDirectoryResponse {
        let input = CreateDirectoryRequest(
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.createDirectory(input, logger: logger)
    }

    /// Creates a new Facet in a schema. Facet creation is allowed only in development or applied schemas.
    @Sendable
    @inlinable
    public func createFacet(_ input: CreateFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFacetResponse {
        try await self.client.execute(
            operation: "CreateFacet", 
            path: "/amazonclouddirectory/2017-01-11/facet/create", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new Facet in a schema. Facet creation is allowed only in development or applied schemas.
    ///
    /// Parameters:
    ///   - attributes: The attributes that are associated with the Facet.
    ///   - facetStyle: There are two different styles that you can define on any given facet, Static and Dynamic. For static facets, all attributes must be defined in the schema. For dynamic facets, attributes can be defined during data plane operations.
    ///   - name: The name of the Facet, which is unique for a given schema.
    ///   - objectType: Specifies whether a given object created from this facet is of type node, leaf node, policy or index.   Node: Can have multiple children but one parent.     Leaf node: Cannot have children but can have multiple parents.     Policy: Allows you to store a policy document and policy type. For more information, see Policies.     Index: Can be created with the Index API.
    ///   - schemaArn: The schema ARN in which the new Facet will be created. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFacet(
        attributes: [FacetAttribute]? = nil,
        facetStyle: FacetStyle? = nil,
        name: String,
        objectType: ObjectType? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFacetResponse {
        let input = CreateFacetRequest(
            attributes: attributes, 
            facetStyle: facetStyle, 
            name: name, 
            objectType: objectType, 
            schemaArn: schemaArn
        )
        return try await self.createFacet(input, logger: logger)
    }

    /// Creates an index object. See Indexing and search for more information.
    @Sendable
    @inlinable
    public func createIndex(_ input: CreateIndexRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateIndexResponse {
        try await self.client.execute(
            operation: "CreateIndex", 
            path: "/amazonclouddirectory/2017-01-11/index", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an index object. See Indexing and search for more information.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory where the index should be created.
    ///   - isUnique: Indicates whether the attribute that is being indexed has unique values or not.
    ///   - linkName: The name of the link between the parent object and the index object.
    ///   - orderedIndexedAttributeList: Specifies the attributes that should be indexed on. Currently only a single attribute is supported.
    ///   - parentReference: A reference to the parent object that contains the index object.
    ///   - logger: Logger use during operation
    @inlinable
    public func createIndex(
        directoryArn: String,
        isUnique: Bool = false,
        linkName: String? = nil,
        orderedIndexedAttributeList: [AttributeKey],
        parentReference: ObjectReference? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateIndexResponse {
        let input = CreateIndexRequest(
            directoryArn: directoryArn, 
            isUnique: isUnique, 
            linkName: linkName, 
            orderedIndexedAttributeList: orderedIndexedAttributeList, 
            parentReference: parentReference
        )
        return try await self.createIndex(input, logger: logger)
    }

    /// Creates an object in a Directory. Additionally attaches the object to a parent, if a parent reference and LinkName is specified. An object is simply a collection of Facet attributes. You can also use this API call to create a policy object, if the facet from which you create the object is a policy facet.
    @Sendable
    @inlinable
    public func createObject(_ input: CreateObjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateObjectResponse {
        try await self.client.execute(
            operation: "CreateObject", 
            path: "/amazonclouddirectory/2017-01-11/object", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an object in a Directory. Additionally attaches the object to a parent, if a parent reference and LinkName is specified. An object is simply a collection of Facet attributes. You can also use this API call to create a policy object, if the facet from which you create the object is a policy facet.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory in which the object will be created. For more information, see arns.
    ///   - linkName: The name of link that is used to attach this object to a parent.
    ///   - objectAttributeList: The attribute map whose attribute ARN contains the key and attribute value as the map value.
    ///   - parentReference: If specified, the parent reference to which this object will be attached.
    ///   - schemaFacets: A list of schema facets to be associated with the object. Do not provide minor version components. See SchemaFacet for details.
    ///   - logger: Logger use during operation
    @inlinable
    public func createObject(
        directoryArn: String,
        linkName: String? = nil,
        objectAttributeList: [AttributeKeyAndValue]? = nil,
        parentReference: ObjectReference? = nil,
        schemaFacets: [SchemaFacet],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateObjectResponse {
        let input = CreateObjectRequest(
            directoryArn: directoryArn, 
            linkName: linkName, 
            objectAttributeList: objectAttributeList, 
            parentReference: parentReference, 
            schemaFacets: schemaFacets
        )
        return try await self.createObject(input, logger: logger)
    }

    /// Creates a new schema in a development state. A schema can exist in three phases:    Development: This is a mutable phase of the schema. All new schemas are in the development phase. Once the schema is finalized, it can be published.    Published: Published schemas are immutable and have a version associated with them.    Applied: Applied schemas are mutable in a way that allows you to add new schema facets. You can also add new, nonrequired attributes to existing schema facets. You can apply only published schemas to directories.
    @Sendable
    @inlinable
    public func createSchema(_ input: CreateSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateSchemaResponse {
        try await self.client.execute(
            operation: "CreateSchema", 
            path: "/amazonclouddirectory/2017-01-11/schema/create", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new schema in a development state. A schema can exist in three phases:    Development: This is a mutable phase of the schema. All new schemas are in the development phase. Once the schema is finalized, it can be published.    Published: Published schemas are immutable and have a version associated with them.    Applied: Applied schemas are mutable in a way that allows you to add new schema facets. You can also add new, nonrequired attributes to existing schema facets. You can apply only published schemas to directories.
    ///
    /// Parameters:
    ///   - name: The name that is associated with the schema. This is unique to each account and in each region.
    ///   - logger: Logger use during operation
    @inlinable
    public func createSchema(
        name: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateSchemaResponse {
        let input = CreateSchemaRequest(
            name: name
        )
        return try await self.createSchema(input, logger: logger)
    }

    /// Creates a TypedLinkFacet. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func createTypedLinkFacet(_ input: CreateTypedLinkFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateTypedLinkFacetResponse {
        try await self.client.execute(
            operation: "CreateTypedLinkFacet", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/facet/create", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a TypedLinkFacet. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - facet:  Facet structure that is associated with the typed link facet.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func createTypedLinkFacet(
        facet: TypedLinkFacet,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateTypedLinkFacetResponse {
        let input = CreateTypedLinkFacetRequest(
            facet: facet, 
            schemaArn: schemaArn
        )
        return try await self.createTypedLinkFacet(input, logger: logger)
    }

    /// Deletes a directory. Only disabled directories can be deleted. A deleted directory cannot be undone. Exercise extreme caution when deleting directories.
    @Sendable
    @inlinable
    public func deleteDirectory(_ input: DeleteDirectoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDirectoryResponse {
        try await self.client.execute(
            operation: "DeleteDirectory", 
            path: "/amazonclouddirectory/2017-01-11/directory", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a directory. Only disabled directories can be deleted. A deleted directory cannot be undone. Exercise extreme caution when deleting directories.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDirectory(
        directoryArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDirectoryResponse {
        let input = DeleteDirectoryRequest(
            directoryArn: directoryArn
        )
        return try await self.deleteDirectory(input, logger: logger)
    }

    /// Deletes a given Facet. All attributes and Rules that are associated with the facet will be deleted. Only development schema facets are allowed deletion.
    @Sendable
    @inlinable
    public func deleteFacet(_ input: DeleteFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteFacetResponse {
        try await self.client.execute(
            operation: "DeleteFacet", 
            path: "/amazonclouddirectory/2017-01-11/facet/delete", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a given Facet. All attributes and Rules that are associated with the facet will be deleted. Only development schema facets are allowed deletion.
    ///
    /// Parameters:
    ///   - name: The name of the facet to delete.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the Facet. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFacet(
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteFacetResponse {
        let input = DeleteFacetRequest(
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.deleteFacet(input, logger: logger)
    }

    /// Deletes an object and its associated attributes. Only objects with no children and no parents can be deleted. The maximum number of attributes that can be deleted during an object deletion is 30. For more information, see Amazon Cloud Directory Limits.
    @Sendable
    @inlinable
    public func deleteObject(_ input: DeleteObjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteObjectResponse {
        try await self.client.execute(
            operation: "DeleteObject", 
            path: "/amazonclouddirectory/2017-01-11/object/delete", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an object and its associated attributes. Only objects with no children and no parents can be deleted. The maximum number of attributes that can be deleted during an object deletion is 30. For more information, see Amazon Cloud Directory Limits.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - objectReference: A reference that identifies the object.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteObject(
        directoryArn: String,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteObjectResponse {
        let input = DeleteObjectRequest(
            directoryArn: directoryArn, 
            objectReference: objectReference
        )
        return try await self.deleteObject(input, logger: logger)
    }

    /// Deletes a given schema. Schemas in a development and published state can only be deleted.
    @Sendable
    @inlinable
    public func deleteSchema(_ input: DeleteSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteSchemaResponse {
        try await self.client.execute(
            operation: "DeleteSchema", 
            path: "/amazonclouddirectory/2017-01-11/schema", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a given schema. Schemas in a development and published state can only be deleted.
    ///
    /// Parameters:
    ///   - schemaArn: The Amazon Resource Name (ARN) of the development schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteSchema(
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteSchemaResponse {
        let input = DeleteSchemaRequest(
            schemaArn: schemaArn
        )
        return try await self.deleteSchema(input, logger: logger)
    }

    /// Deletes a TypedLinkFacet. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func deleteTypedLinkFacet(_ input: DeleteTypedLinkFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteTypedLinkFacetResponse {
        try await self.client.execute(
            operation: "DeleteTypedLinkFacet", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/facet/delete", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a TypedLinkFacet. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - name: The unique name of the typed link facet.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteTypedLinkFacet(
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteTypedLinkFacetResponse {
        let input = DeleteTypedLinkFacetRequest(
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.deleteTypedLinkFacet(input, logger: logger)
    }

    /// Detaches the specified object from the specified index.
    @Sendable
    @inlinable
    public func detachFromIndex(_ input: DetachFromIndexRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachFromIndexResponse {
        try await self.client.execute(
            operation: "DetachFromIndex", 
            path: "/amazonclouddirectory/2017-01-11/index/detach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches the specified object from the specified index.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) of the directory the index and object exist in.
    ///   - indexReference: A reference to the index object.
    ///   - targetReference: A reference to the object being detached from the index.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachFromIndex(
        directoryArn: String,
        indexReference: ObjectReference,
        targetReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachFromIndexResponse {
        let input = DetachFromIndexRequest(
            directoryArn: directoryArn, 
            indexReference: indexReference, 
            targetReference: targetReference
        )
        return try await self.detachFromIndex(input, logger: logger)
    }

    /// Detaches a given object from the parent object. The object that is to be detached from the parent is specified by the link name.
    @Sendable
    @inlinable
    public func detachObject(_ input: DetachObjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachObjectResponse {
        try await self.client.execute(
            operation: "DetachObject", 
            path: "/amazonclouddirectory/2017-01-11/object/detach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches a given object from the parent object. The object that is to be detached from the parent is specified by the link name.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
    ///   - linkName: The link name associated with the object that needs to be detached.
    ///   - parentReference: The parent reference from which the object with the specified link name is detached.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachObject(
        directoryArn: String,
        linkName: String,
        parentReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachObjectResponse {
        let input = DetachObjectRequest(
            directoryArn: directoryArn, 
            linkName: linkName, 
            parentReference: parentReference
        )
        return try await self.detachObject(input, logger: logger)
    }

    /// Detaches a policy from an object.
    @Sendable
    @inlinable
    public func detachPolicy(_ input: DetachPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachPolicyResponse {
        try await self.client.execute(
            operation: "DetachPolicy", 
            path: "/amazonclouddirectory/2017-01-11/policy/detach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches a policy from an object.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where both objects reside. For more information, see arns.
    ///   - objectReference: Reference that identifies the object whose policy object will be detached.
    ///   - policyReference: Reference that identifies the policy object.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachPolicy(
        directoryArn: String,
        objectReference: ObjectReference,
        policyReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachPolicyResponse {
        let input = DetachPolicyRequest(
            directoryArn: directoryArn, 
            objectReference: objectReference, 
            policyReference: policyReference
        )
        return try await self.detachPolicy(input, logger: logger)
    }

    /// Detaches a typed link from a specified source and target object. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func detachTypedLink(_ input: DetachTypedLinkRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DetachTypedLink", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/detach", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches a typed link from a specified source and target object. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) of the directory where you want to detach the typed link.
    ///   - typedLinkSpecifier: Used to accept a typed link specifier as input.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachTypedLink(
        directoryArn: String,
        typedLinkSpecifier: TypedLinkSpecifier,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DetachTypedLinkRequest(
            directoryArn: directoryArn, 
            typedLinkSpecifier: typedLinkSpecifier
        )
        return try await self.detachTypedLink(input, logger: logger)
    }

    /// Disables the specified directory. Disabled directories cannot be read or written to. Only enabled directories can be disabled. Disabled directories may be reenabled.
    @Sendable
    @inlinable
    public func disableDirectory(_ input: DisableDirectoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableDirectoryResponse {
        try await self.client.execute(
            operation: "DisableDirectory", 
            path: "/amazonclouddirectory/2017-01-11/directory/disable", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables the specified directory. Disabled directories cannot be read or written to. Only enabled directories can be disabled. Disabled directories may be reenabled.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory to disable.
    ///   - logger: Logger use during operation
    @inlinable
    public func disableDirectory(
        directoryArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableDirectoryResponse {
        let input = DisableDirectoryRequest(
            directoryArn: directoryArn
        )
        return try await self.disableDirectory(input, logger: logger)
    }

    /// Enables the specified directory. Only disabled directories can be enabled. Once enabled, the directory can then be read and written to.
    @Sendable
    @inlinable
    public func enableDirectory(_ input: EnableDirectoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableDirectoryResponse {
        try await self.client.execute(
            operation: "EnableDirectory", 
            path: "/amazonclouddirectory/2017-01-11/directory/enable", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables the specified directory. Only disabled directories can be enabled. Once enabled, the directory can then be read and written to.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory to enable.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableDirectory(
        directoryArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableDirectoryResponse {
        let input = EnableDirectoryRequest(
            directoryArn: directoryArn
        )
        return try await self.enableDirectory(input, logger: logger)
    }

    /// Returns current applied schema version ARN, including the minor version in use.
    @Sendable
    @inlinable
    public func getAppliedSchemaVersion(_ input: GetAppliedSchemaVersionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAppliedSchemaVersionResponse {
        try await self.client.execute(
            operation: "GetAppliedSchemaVersion", 
            path: "/amazonclouddirectory/2017-01-11/schema/getappliedschema", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns current applied schema version ARN, including the minor version in use.
    ///
    /// Parameters:
    ///   - schemaArn: The ARN of the applied schema.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAppliedSchemaVersion(
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAppliedSchemaVersionResponse {
        let input = GetAppliedSchemaVersionRequest(
            schemaArn: schemaArn
        )
        return try await self.getAppliedSchemaVersion(input, logger: logger)
    }

    /// Retrieves metadata about a directory.
    @Sendable
    @inlinable
    public func getDirectory(_ input: GetDirectoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDirectoryResponse {
        try await self.client.execute(
            operation: "GetDirectory", 
            path: "/amazonclouddirectory/2017-01-11/directory/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves metadata about a directory.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDirectory(
        directoryArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDirectoryResponse {
        let input = GetDirectoryRequest(
            directoryArn: directoryArn
        )
        return try await self.getDirectory(input, logger: logger)
    }

    /// Gets details of the Facet, such as facet name, attributes, Rules, or ObjectType. You can call this on all kinds of schema facets -- published, development, or applied.
    @Sendable
    @inlinable
    public func getFacet(_ input: GetFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetFacetResponse {
        try await self.client.execute(
            operation: "GetFacet", 
            path: "/amazonclouddirectory/2017-01-11/facet", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets details of the Facet, such as facet name, attributes, Rules, or ObjectType. You can call this on all kinds of schema facets -- published, development, or applied.
    ///
    /// Parameters:
    ///   - name: The name of the facet to retrieve.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the Facet. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func getFacet(
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetFacetResponse {
        let input = GetFacetRequest(
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.getFacet(input, logger: logger)
    }

    /// Retrieves attributes that are associated with a typed link.
    @Sendable
    @inlinable
    public func getLinkAttributes(_ input: GetLinkAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLinkAttributesResponse {
        try await self.client.execute(
            operation: "GetLinkAttributes", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/attributes/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves attributes that are associated with a typed link.
    ///
    /// Parameters:
    ///   - attributeNames: A list of attribute names whose values will be retrieved.
    ///   - consistencyLevel: The consistency level at which to retrieve the attributes on a typed link.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the typed link resides. For more information, see arns or Typed Links.
    ///   - typedLinkSpecifier: Allows a typed link specifier to be accepted as input.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLinkAttributes(
        attributeNames: [String],
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        typedLinkSpecifier: TypedLinkSpecifier,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLinkAttributesResponse {
        let input = GetLinkAttributesRequest(
            attributeNames: attributeNames, 
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            typedLinkSpecifier: typedLinkSpecifier
        )
        return try await self.getLinkAttributes(input, logger: logger)
    }

    /// Retrieves attributes within a facet that are associated with an object.
    @Sendable
    @inlinable
    public func getObjectAttributes(_ input: GetObjectAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetObjectAttributesResponse {
        try await self.client.execute(
            operation: "GetObjectAttributes", 
            path: "/amazonclouddirectory/2017-01-11/object/attributes/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves attributes within a facet that are associated with an object.
    ///
    /// Parameters:
    ///   - attributeNames: List of attribute names whose values will be retrieved.
    ///   - consistencyLevel: The consistency level at which to retrieve the attributes on an object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides.
    ///   - objectReference: Reference that identifies the object whose attributes will be retrieved.
    ///   - schemaFacet: Identifier for the facet whose attributes will be retrieved. See SchemaFacet for details.
    ///   - logger: Logger use during operation
    @inlinable
    public func getObjectAttributes(
        attributeNames: [String],
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        objectReference: ObjectReference,
        schemaFacet: SchemaFacet,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetObjectAttributesResponse {
        let input = GetObjectAttributesRequest(
            attributeNames: attributeNames, 
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            objectReference: objectReference, 
            schemaFacet: schemaFacet
        )
        return try await self.getObjectAttributes(input, logger: logger)
    }

    /// Retrieves metadata about an object.
    @Sendable
    @inlinable
    public func getObjectInformation(_ input: GetObjectInformationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetObjectInformationResponse {
        try await self.client.execute(
            operation: "GetObjectInformation", 
            path: "/amazonclouddirectory/2017-01-11/object/information", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves metadata about an object.
    ///
    /// Parameters:
    ///   - consistencyLevel: The consistency level at which to retrieve the object information.
    ///   - directoryArn: The ARN of the directory being retrieved.
    ///   - objectReference: A reference to the object.
    ///   - logger: Logger use during operation
    @inlinable
    public func getObjectInformation(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetObjectInformationResponse {
        let input = GetObjectInformationRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            objectReference: objectReference
        )
        return try await self.getObjectInformation(input, logger: logger)
    }

    /// Retrieves a JSON representation of the schema. See JSON Schema Format for more information.
    @Sendable
    @inlinable
    public func getSchemaAsJson(_ input: GetSchemaAsJsonRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSchemaAsJsonResponse {
        try await self.client.execute(
            operation: "GetSchemaAsJson", 
            path: "/amazonclouddirectory/2017-01-11/schema/json", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a JSON representation of the schema. See JSON Schema Format for more information.
    ///
    /// Parameters:
    ///   - schemaArn: The ARN of the schema to retrieve.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSchemaAsJson(
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSchemaAsJsonResponse {
        let input = GetSchemaAsJsonRequest(
            schemaArn: schemaArn
        )
        return try await self.getSchemaAsJson(input, logger: logger)
    }

    /// Returns the identity attribute order for a specific TypedLinkFacet. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func getTypedLinkFacetInformation(_ input: GetTypedLinkFacetInformationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetTypedLinkFacetInformationResponse {
        try await self.client.execute(
            operation: "GetTypedLinkFacetInformation", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/facet/get", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the identity attribute order for a specific TypedLinkFacet. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - name: The unique name of the typed link facet.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func getTypedLinkFacetInformation(
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetTypedLinkFacetInformationResponse {
        let input = GetTypedLinkFacetInformationRequest(
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.getTypedLinkFacetInformation(input, logger: logger)
    }

    /// Lists schema major versions applied to a directory. If SchemaArn is provided, lists the minor version.
    @Sendable
    @inlinable
    public func listAppliedSchemaArns(_ input: ListAppliedSchemaArnsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAppliedSchemaArnsResponse {
        try await self.client.execute(
            operation: "ListAppliedSchemaArns", 
            path: "/amazonclouddirectory/2017-01-11/schema/applied", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists schema major versions applied to a directory. If SchemaArn is provided, lists the minor version.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory you are listing.
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The response for ListAppliedSchemaArns when this parameter is used will list all minor version ARNs for a major version.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAppliedSchemaArns(
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        schemaArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAppliedSchemaArnsResponse {
        let input = ListAppliedSchemaArnsRequest(
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listAppliedSchemaArns(input, logger: logger)
    }

    /// Lists indices attached to the specified object.
    @Sendable
    @inlinable
    public func listAttachedIndices(_ input: ListAttachedIndicesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAttachedIndicesResponse {
        try await self.client.execute(
            operation: "ListAttachedIndices", 
            path: "/amazonclouddirectory/2017-01-11/object/indices", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists indices attached to the specified object.
    ///
    /// Parameters:
    ///   - consistencyLevel: The consistency level to use for this operation.
    ///   - directoryArn: The ARN of the directory.
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - targetReference: A reference to the object that has indices attached.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAttachedIndices(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        targetReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAttachedIndicesResponse {
        let input = ListAttachedIndicesRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            targetReference: targetReference
        )
        return try await self.listAttachedIndices(input, logger: logger)
    }

    /// Retrieves each Amazon Resource Name (ARN) of schemas in the development state.
    @Sendable
    @inlinable
    public func listDevelopmentSchemaArns(_ input: ListDevelopmentSchemaArnsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDevelopmentSchemaArnsResponse {
        try await self.client.execute(
            operation: "ListDevelopmentSchemaArns", 
            path: "/amazonclouddirectory/2017-01-11/schema/development", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves each Amazon Resource Name (ARN) of schemas in the development state.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDevelopmentSchemaArns(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDevelopmentSchemaArnsResponse {
        let input = ListDevelopmentSchemaArnsRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDevelopmentSchemaArns(input, logger: logger)
    }

    /// Lists directories created within an account.
    @Sendable
    @inlinable
    public func listDirectories(_ input: ListDirectoriesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDirectoriesResponse {
        try await self.client.execute(
            operation: "ListDirectories", 
            path: "/amazonclouddirectory/2017-01-11/directory/list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists directories created within an account.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - state: The state of the directories in the list. Can be either Enabled, Disabled, or Deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDirectories(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        state: DirectoryState? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDirectoriesResponse {
        let input = ListDirectoriesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            state: state
        )
        return try await self.listDirectories(input, logger: logger)
    }

    /// Retrieves attributes attached to the facet.
    @Sendable
    @inlinable
    public func listFacetAttributes(_ input: ListFacetAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFacetAttributesResponse {
        try await self.client.execute(
            operation: "ListFacetAttributes", 
            path: "/amazonclouddirectory/2017-01-11/facet/attributes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves attributes attached to the facet.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - name: The name of the facet whose attributes will be retrieved.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The ARN of the schema where the facet resides.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFacetAttributes(
        maxResults: Int? = nil,
        name: String,
        nextToken: String? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFacetAttributesResponse {
        let input = ListFacetAttributesRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listFacetAttributes(input, logger: logger)
    }

    /// Retrieves the names of facets that exist in a schema.
    @Sendable
    @inlinable
    public func listFacetNames(_ input: ListFacetNamesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFacetNamesResponse {
        try await self.client.execute(
            operation: "ListFacetNames", 
            path: "/amazonclouddirectory/2017-01-11/facet/list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the names of facets that exist in a schema.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The Amazon Resource Name (ARN) to retrieve facet names from.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFacetNames(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFacetNamesResponse {
        let input = ListFacetNamesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listFacetNames(input, logger: logger)
    }

    /// Returns a paginated list of all the incoming TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func listIncomingTypedLinks(_ input: ListIncomingTypedLinksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListIncomingTypedLinksResponse {
        try await self.client.execute(
            operation: "ListIncomingTypedLinks", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/incoming", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a paginated list of all the incoming TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - consistencyLevel: The consistency level to execute the request at.
    ///   - directoryArn: The Amazon Resource Name (ARN) of the directory where you want to list the typed links.
    ///   - filterAttributeRanges: Provides range filters for multiple attributes. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range.
    ///   - filterTypedLink: Filters are interpreted in the order of the attributes on the typed link facet, not the order in which they are supplied to any API calls.
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - objectReference: Reference that identifies the object whose attributes will be listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listIncomingTypedLinks(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        filterAttributeRanges: [TypedLinkAttributeRange]? = nil,
        filterTypedLink: TypedLinkSchemaAndFacetName? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListIncomingTypedLinksResponse {
        let input = ListIncomingTypedLinksRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            filterAttributeRanges: filterAttributeRanges, 
            filterTypedLink: filterTypedLink, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listIncomingTypedLinks(input, logger: logger)
    }

    /// Lists objects attached to the specified index.
    @Sendable
    @inlinable
    public func listIndex(_ input: ListIndexRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListIndexResponse {
        try await self.client.execute(
            operation: "ListIndex", 
            path: "/amazonclouddirectory/2017-01-11/index/targets", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists objects attached to the specified index.
    ///
    /// Parameters:
    ///   - consistencyLevel: The consistency level to execute the request at.
    ///   - directoryArn: The ARN of the directory that the index exists in.
    ///   - indexReference: The reference to the index to list.
    ///   - maxResults: The maximum number of objects in a single page to retrieve from the index during a request. For more information, see Amazon Cloud Directory Limits.
    ///   - nextToken: The pagination token.
    ///   - rangesOnIndexedValues: Specifies the ranges of indexed values that you want to query.
    ///   - logger: Logger use during operation
    @inlinable
    public func listIndex(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        indexReference: ObjectReference,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        rangesOnIndexedValues: [ObjectAttributeRange]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListIndexResponse {
        let input = ListIndexRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            indexReference: indexReference, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            rangesOnIndexedValues: rangesOnIndexedValues
        )
        return try await self.listIndex(input, logger: logger)
    }

    /// Lists the major version families of each managed schema. If a major version ARN is provided as SchemaArn, the minor version revisions in that family are listed instead.
    @Sendable
    @inlinable
    public func listManagedSchemaArns(_ input: ListManagedSchemaArnsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListManagedSchemaArnsResponse {
        try await self.client.execute(
            operation: "ListManagedSchemaArns", 
            path: "/amazonclouddirectory/2017-01-11/schema/managed", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the major version families of each managed schema. If a major version ARN is provided as SchemaArn, the minor version revisions in that family are listed instead.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The response for ListManagedSchemaArns. When this parameter is used, all minor version ARNs for a major version are listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listManagedSchemaArns(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        schemaArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListManagedSchemaArnsResponse {
        let input = ListManagedSchemaArnsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listManagedSchemaArns(input, logger: logger)
    }

    /// Lists all attributes that are associated with an object.
    @Sendable
    @inlinable
    public func listObjectAttributes(_ input: ListObjectAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListObjectAttributesResponse {
        try await self.client.execute(
            operation: "ListObjectAttributes", 
            path: "/amazonclouddirectory/2017-01-11/object/attributes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all attributes that are associated with an object.
    ///
    /// Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - facetFilter: Used to filter the list of object attributes that are associated with a certain facet.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The pagination token.
    ///   - objectReference: The reference that identifies the object whose attributes will be listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listObjectAttributes(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        facetFilter: SchemaFacet? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListObjectAttributesResponse {
        let input = ListObjectAttributesRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            facetFilter: facetFilter, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listObjectAttributes(input, logger: logger)
    }

    /// Returns a paginated list of child objects that are associated with a given object.
    @Sendable
    @inlinable
    public func listObjectChildren(_ input: ListObjectChildrenRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListObjectChildrenResponse {
        try await self.client.execute(
            operation: "ListObjectChildren", 
            path: "/amazonclouddirectory/2017-01-11/object/children", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a paginated list of child objects that are associated with a given object.
    ///
    /// Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The pagination token.
    ///   - objectReference: The reference that identifies the object for which child objects are being listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listObjectChildren(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListObjectChildrenResponse {
        let input = ListObjectChildrenRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listObjectChildren(input, logger: logger)
    }

    /// Retrieves all available parent paths for any object type such as node, leaf node, policy node, and index node objects. For more information about objects, see Directory Structure. Use this API to evaluate all parents for an object. The call returns all objects from the root of the directory up to the requested object. The API returns the number of paths based on user-defined MaxResults, in case there are multiple paths to the parent. The order of the paths and nodes returned is consistent among multiple API calls unless the objects are deleted or moved. Paths not leading to the directory root are ignored from the target object.
    @Sendable
    @inlinable
    public func listObjectParentPaths(_ input: ListObjectParentPathsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListObjectParentPathsResponse {
        try await self.client.execute(
            operation: "ListObjectParentPaths", 
            path: "/amazonclouddirectory/2017-01-11/object/parentpaths", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves all available parent paths for any object type such as node, leaf node, policy node, and index node objects. For more information about objects, see Directory Structure. Use this API to evaluate all parents for an object. The call returns all objects from the root of the directory up to the requested object. The API returns the number of paths based on user-defined MaxResults, in case there are multiple paths to the parent. The order of the paths and nodes returned is consistent among multiple API calls unless the objects are deleted or moved. Paths not leading to the directory root are ignored from the target object.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory to which the parent path applies.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The pagination token.
    ///   - objectReference: The reference that identifies the object whose parent paths are listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listObjectParentPaths(
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListObjectParentPathsResponse {
        let input = ListObjectParentPathsRequest(
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listObjectParentPaths(input, logger: logger)
    }

    /// Lists parent objects that are associated with a given object in pagination fashion.
    @Sendable
    @inlinable
    public func listObjectParents(_ input: ListObjectParentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListObjectParentsResponse {
        try await self.client.execute(
            operation: "ListObjectParents", 
            path: "/amazonclouddirectory/2017-01-11/object/parent", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists parent objects that are associated with a given object in pagination fashion.
    ///
    /// Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - includeAllLinksToEachParent: When set to True, returns all ListObjectParentsResponse$ParentLinks. There could be multiple links between a parent-child pair.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The pagination token.
    ///   - objectReference: The reference that identifies the object for which parent objects are being listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listObjectParents(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        includeAllLinksToEachParent: Bool? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListObjectParentsResponse {
        let input = ListObjectParentsRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            includeAllLinksToEachParent: includeAllLinksToEachParent, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listObjectParents(input, logger: logger)
    }

    /// Returns policies attached to an object in pagination fashion.
    @Sendable
    @inlinable
    public func listObjectPolicies(_ input: ListObjectPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListObjectPoliciesResponse {
        try await self.client.execute(
            operation: "ListObjectPolicies", 
            path: "/amazonclouddirectory/2017-01-11/object/policy", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns policies attached to an object in pagination fashion.
    ///
    /// Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The pagination token.
    ///   - objectReference: Reference that identifies the object for which policies will be listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listObjectPolicies(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListObjectPoliciesResponse {
        let input = ListObjectPoliciesRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listObjectPolicies(input, logger: logger)
    }

    /// Returns a paginated list of all the outgoing TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func listOutgoingTypedLinks(_ input: ListOutgoingTypedLinksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListOutgoingTypedLinksResponse {
        try await self.client.execute(
            operation: "ListOutgoingTypedLinks", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/outgoing", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a paginated list of all the outgoing TypedLinkSpecifier information for an object. It also supports filtering by typed link facet and identity attributes. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - consistencyLevel: The consistency level to execute the request at.
    ///   - directoryArn: The Amazon Resource Name (ARN) of the directory where you want to list the typed links.
    ///   - filterAttributeRanges: Provides range filters for multiple attributes. When providing ranges to typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range.
    ///   - filterTypedLink: Filters are interpreted in the order of the attributes defined on the typed link facet, not the order they are supplied to any API calls.
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - objectReference: A reference that identifies the object whose attributes will be listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listOutgoingTypedLinks(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        filterAttributeRanges: [TypedLinkAttributeRange]? = nil,
        filterTypedLink: TypedLinkSchemaAndFacetName? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListOutgoingTypedLinksResponse {
        let input = ListOutgoingTypedLinksRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            filterAttributeRanges: filterAttributeRanges, 
            filterTypedLink: filterTypedLink, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.listOutgoingTypedLinks(input, logger: logger)
    }

    /// Returns all of the ObjectIdentifiers to which a given policy is attached.
    @Sendable
    @inlinable
    public func listPolicyAttachments(_ input: ListPolicyAttachmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPolicyAttachmentsResponse {
        try await self.client.execute(
            operation: "ListPolicyAttachments", 
            path: "/amazonclouddirectory/2017-01-11/policy/attachment", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all of the ObjectIdentifiers to which a given policy is attached.
    ///
    /// Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The pagination token.
    ///   - policyReference: The reference that identifies the policy object.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPolicyAttachments(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        policyReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPolicyAttachmentsResponse {
        let input = ListPolicyAttachmentsRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            policyReference: policyReference
        )
        return try await self.listPolicyAttachments(input, logger: logger)
    }

    /// Lists the major version families of each published schema. If a major version ARN is provided as SchemaArn, the minor version revisions in that family are listed instead.
    @Sendable
    @inlinable
    public func listPublishedSchemaArns(_ input: ListPublishedSchemaArnsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPublishedSchemaArnsResponse {
        try await self.client.execute(
            operation: "ListPublishedSchemaArns", 
            path: "/amazonclouddirectory/2017-01-11/schema/published", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the major version families of each published schema. If a major version ARN is provided as SchemaArn, the minor version revisions in that family are listed instead.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The response for ListPublishedSchemaArns when this parameter is used will list all minor version ARNs for a major version.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPublishedSchemaArns(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        schemaArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPublishedSchemaArnsResponse {
        let input = ListPublishedSchemaArnsRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listPublishedSchemaArns(input, logger: logger)
    }

    /// Returns tags for a resource. Tagging is currently supported only for directories with a limit of 50 tags per directory. All 50 tags are returned for a given directory with this API call.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/amazonclouddirectory/2017-01-11/tags", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns tags for a resource. Tagging is currently supported only for directories with a limit of 50 tags per directory. All 50 tags are returned for a given directory with this API call.
    ///
    /// Parameters:
    ///   - maxResults: The MaxResults parameter sets the maximum number of results returned in a single page. This is for future use and is not supported currently.
    ///   - nextToken: The pagination token. This is for future use. Currently pagination is not supported for tagging.
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Returns a paginated list of all attribute definitions for a particular TypedLinkFacet. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func listTypedLinkFacetAttributes(_ input: ListTypedLinkFacetAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTypedLinkFacetAttributesResponse {
        try await self.client.execute(
            operation: "ListTypedLinkFacetAttributes", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/facet/attributes", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a paginated list of all attribute definitions for a particular TypedLinkFacet. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - name: The unique name of the typed link facet.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTypedLinkFacetAttributes(
        maxResults: Int? = nil,
        name: String,
        nextToken: String? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTypedLinkFacetAttributesResponse {
        let input = ListTypedLinkFacetAttributesRequest(
            maxResults: maxResults, 
            name: name, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listTypedLinkFacetAttributes(input, logger: logger)
    }

    /// Returns a paginated list of TypedLink facet names for a particular schema. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func listTypedLinkFacetNames(_ input: ListTypedLinkFacetNamesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTypedLinkFacetNamesResponse {
        try await self.client.execute(
            operation: "ListTypedLinkFacetNames", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/facet/list", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a paginated list of TypedLink facet names for a particular schema. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - nextToken: The pagination token.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTypedLinkFacetNames(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTypedLinkFacetNamesResponse {
        let input = ListTypedLinkFacetNamesRequest(
            maxResults: maxResults, 
            nextToken: nextToken, 
            schemaArn: schemaArn
        )
        return try await self.listTypedLinkFacetNames(input, logger: logger)
    }

    /// Lists all policies from the root of the Directory to the object specified. If there are no policies present, an empty list is returned. If policies are present, and if some objects don't have the policies attached, it returns the ObjectIdentifier for such objects. If policies are present, it returns ObjectIdentifier, policyId, and policyType. Paths that don't lead to the root from the target object are ignored. For more information, see Policies.
    @Sendable
    @inlinable
    public func lookupPolicy(_ input: LookupPolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> LookupPolicyResponse {
        try await self.client.execute(
            operation: "LookupPolicy", 
            path: "/amazonclouddirectory/2017-01-11/policy/lookup", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all policies from the root of the Directory to the object specified. If there are no policies present, an empty list is returned. If policies are present, and if some objects don't have the policies attached, it returns the ObjectIdentifier for such objects. If policies are present, it returns ObjectIdentifier, policyId, and policyType. Paths that don't lead to the root from the target object are ignored. For more information, see Policies.
    ///
    /// Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - nextToken: The token to request the next page of results.
    ///   - objectReference: Reference that identifies the object whose policies will be looked up.
    ///   - logger: Logger use during operation
    @inlinable
    public func lookupPolicy(
        directoryArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> LookupPolicyResponse {
        let input = LookupPolicyRequest(
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            objectReference: objectReference
        )
        return try await self.lookupPolicy(input, logger: logger)
    }

    /// Publishes a development schema with a major version and a recommended minor version.
    @Sendable
    @inlinable
    public func publishSchema(_ input: PublishSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PublishSchemaResponse {
        try await self.client.execute(
            operation: "PublishSchema", 
            path: "/amazonclouddirectory/2017-01-11/schema/publish", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Publishes a development schema with a major version and a recommended minor version.
    ///
    /// Parameters:
    ///   - developmentSchemaArn: The Amazon Resource Name (ARN) that is associated with the development schema. For more information, see arns.
    ///   - minorVersion: The minor version under which the schema will be published. This parameter is recommended. Schemas have both a major and minor version associated with them.
    ///   - name: The new name under which the schema will be published. If this is not provided, the development schema is considered.
    ///   - version: The major version under which the schema will be published. Schemas have both a major and minor version associated with them.
    ///   - logger: Logger use during operation
    @inlinable
    public func publishSchema(
        developmentSchemaArn: String,
        minorVersion: String? = nil,
        name: String? = nil,
        version: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PublishSchemaResponse {
        let input = PublishSchemaRequest(
            developmentSchemaArn: developmentSchemaArn, 
            minorVersion: minorVersion, 
            name: name, 
            version: version
        )
        return try await self.publishSchema(input, logger: logger)
    }

    /// Allows a schema to be updated using JSON upload. Only available for development schemas. See JSON Schema Format for more information.
    @Sendable
    @inlinable
    public func putSchemaFromJson(_ input: PutSchemaFromJsonRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutSchemaFromJsonResponse {
        try await self.client.execute(
            operation: "PutSchemaFromJson", 
            path: "/amazonclouddirectory/2017-01-11/schema/json", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows a schema to be updated using JSON upload. Only available for development schemas. See JSON Schema Format for more information.
    ///
    /// Parameters:
    ///   - document: The replacement JSON schema.
    ///   - schemaArn: The ARN of the schema to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func putSchemaFromJson(
        document: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutSchemaFromJsonResponse {
        let input = PutSchemaFromJsonRequest(
            document: document, 
            schemaArn: schemaArn
        )
        return try await self.putSchemaFromJson(input, logger: logger)
    }

    /// Removes the specified facet from the specified object.
    @Sendable
    @inlinable
    public func removeFacetFromObject(_ input: RemoveFacetFromObjectRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RemoveFacetFromObjectResponse {
        try await self.client.execute(
            operation: "RemoveFacetFromObject", 
            path: "/amazonclouddirectory/2017-01-11/object/facets/delete", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes the specified facet from the specified object.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN of the directory in which the object resides.
    ///   - objectReference: A reference to the object to remove the facet from.
    ///   - schemaFacet: The facet to remove. See SchemaFacet for details.
    ///   - logger: Logger use during operation
    @inlinable
    public func removeFacetFromObject(
        directoryArn: String,
        objectReference: ObjectReference,
        schemaFacet: SchemaFacet,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RemoveFacetFromObjectResponse {
        let input = RemoveFacetFromObjectRequest(
            directoryArn: directoryArn, 
            objectReference: objectReference, 
            schemaFacet: schemaFacet
        )
        return try await self.removeFacetFromObject(input, logger: logger)
    }

    /// An API operation for adding tags to a resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/amazonclouddirectory/2017-01-11/tags/add", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// An API operation for adding tags to a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
    ///   - tags: A list of tag key-value pairs.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// An API operation for removing tags from a resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/amazonclouddirectory/2017-01-11/tags/remove", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// An API operation for removing tags from a resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
    ///   - tagKeys: Keys of the tag that need to be removed from the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Does the following:   Adds new Attributes, Rules, or ObjectTypes.   Updates existing Attributes, Rules, or ObjectTypes.   Deletes existing Attributes, Rules, or ObjectTypes.
    @Sendable
    @inlinable
    public func updateFacet(_ input: UpdateFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFacetResponse {
        try await self.client.execute(
            operation: "UpdateFacet", 
            path: "/amazonclouddirectory/2017-01-11/facet", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Does the following:   Adds new Attributes, Rules, or ObjectTypes.   Updates existing Attributes, Rules, or ObjectTypes.   Deletes existing Attributes, Rules, or ObjectTypes.
    ///
    /// Parameters:
    ///   - attributeUpdates: List of attributes that need to be updated in a given schema Facet. Each attribute is followed by AttributeAction, which specifies the type of update operation to perform.
    ///   - name: The name of the facet.
    ///   - objectType: The object type that is associated with the facet. See CreateFacetRequest$ObjectType for more details.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the Facet. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFacet(
        attributeUpdates: [FacetAttributeUpdate]? = nil,
        name: String,
        objectType: ObjectType? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFacetResponse {
        let input = UpdateFacetRequest(
            attributeUpdates: attributeUpdates, 
            name: name, 
            objectType: objectType, 
            schemaArn: schemaArn
        )
        return try await self.updateFacet(input, logger: logger)
    }

    /// Updates a given typed link’s attributes. Attributes to be updated must not contribute to the typed link’s identity, as defined by its IdentityAttributeOrder.
    @Sendable
    @inlinable
    public func updateLinkAttributes(_ input: UpdateLinkAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateLinkAttributesResponse {
        try await self.client.execute(
            operation: "UpdateLinkAttributes", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/attributes/update", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a given typed link’s attributes. Attributes to be updated must not contribute to the typed link’s identity, as defined by its IdentityAttributeOrder.
    ///
    /// Parameters:
    ///   - attributeUpdates: The attributes update structure.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the updated typed link resides. For more information, see arns or Typed Links.
    ///   - typedLinkSpecifier: Allows a typed link specifier to be accepted as input.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateLinkAttributes(
        attributeUpdates: [LinkAttributeUpdate],
        directoryArn: String,
        typedLinkSpecifier: TypedLinkSpecifier,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateLinkAttributesResponse {
        let input = UpdateLinkAttributesRequest(
            attributeUpdates: attributeUpdates, 
            directoryArn: directoryArn, 
            typedLinkSpecifier: typedLinkSpecifier
        )
        return try await self.updateLinkAttributes(input, logger: logger)
    }

    /// Updates a given object's attributes.
    @Sendable
    @inlinable
    public func updateObjectAttributes(_ input: UpdateObjectAttributesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateObjectAttributesResponse {
        try await self.client.execute(
            operation: "UpdateObjectAttributes", 
            path: "/amazonclouddirectory/2017-01-11/object/update", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a given object's attributes.
    ///
    /// Parameters:
    ///   - attributeUpdates: The attributes update structure.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - objectReference: The reference that identifies the object.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateObjectAttributes(
        attributeUpdates: [ObjectAttributeUpdate],
        directoryArn: String,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateObjectAttributesResponse {
        let input = UpdateObjectAttributesRequest(
            attributeUpdates: attributeUpdates, 
            directoryArn: directoryArn, 
            objectReference: objectReference
        )
        return try await self.updateObjectAttributes(input, logger: logger)
    }

    /// Updates the schema name with a new name. Only development schema names can be updated.
    @Sendable
    @inlinable
    public func updateSchema(_ input: UpdateSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateSchemaResponse {
        try await self.client.execute(
            operation: "UpdateSchema", 
            path: "/amazonclouddirectory/2017-01-11/schema/update", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the schema name with a new name. Only development schema names can be updated.
    ///
    /// Parameters:
    ///   - name: The name of the schema.
    ///   - schemaArn: The Amazon Resource Name (ARN) of the development schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateSchema(
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateSchemaResponse {
        let input = UpdateSchemaRequest(
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.updateSchema(input, logger: logger)
    }

    /// Updates a TypedLinkFacet. For more information, see Typed Links.
    @Sendable
    @inlinable
    public func updateTypedLinkFacet(_ input: UpdateTypedLinkFacetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateTypedLinkFacetResponse {
        try await self.client.execute(
            operation: "UpdateTypedLinkFacet", 
            path: "/amazonclouddirectory/2017-01-11/typedlink/facet", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a TypedLinkFacet. For more information, see Typed Links.
    ///
    /// Parameters:
    ///   - attributeUpdates: Attributes update structure.
    ///   - identityAttributeOrder: The order of identity attributes for the facet, from most significant to least significant. The ability to filter typed links considers the order that the attributes are defined on the typed link facet.  When providing ranges to a typed link selection, any inexact ranges must be specified at the end. Any attributes that do not have a range specified are presumed to match the entire range. Filters are interpreted in the order of the attributes on the typed link facet, not the order in which they are supplied to any API calls. For more information about identity attributes, see Typed Links.
    ///   - name: The unique name of the typed link facet.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateTypedLinkFacet(
        attributeUpdates: [TypedLinkFacetAttributeUpdate],
        identityAttributeOrder: [String],
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateTypedLinkFacetResponse {
        let input = UpdateTypedLinkFacetRequest(
            attributeUpdates: attributeUpdates, 
            identityAttributeOrder: identityAttributeOrder, 
            name: name, 
            schemaArn: schemaArn
        )
        return try await self.updateTypedLinkFacet(input, logger: logger)
    }

    /// Upgrades a single directory in-place using the PublishedSchemaArn with schema updates found in MinorVersion. Backwards-compatible minor version upgrades are instantaneously available for readers on all objects in the directory. Note: This is a synchronous API call and upgrades only one schema on a given directory per call. To upgrade multiple directories from one schema, you would need to call this API on each directory.
    @Sendable
    @inlinable
    public func upgradeAppliedSchema(_ input: UpgradeAppliedSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpgradeAppliedSchemaResponse {
        try await self.client.execute(
            operation: "UpgradeAppliedSchema", 
            path: "/amazonclouddirectory/2017-01-11/schema/upgradeapplied", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Upgrades a single directory in-place using the PublishedSchemaArn with schema updates found in MinorVersion. Backwards-compatible minor version upgrades are instantaneously available for readers on all objects in the directory. Note: This is a synchronous API call and upgrades only one schema on a given directory per call. To upgrade multiple directories from one schema, you would need to call this API on each directory.
    ///
    /// Parameters:
    ///   - directoryArn: The ARN for the directory to which the upgraded schema will be applied.
    ///   - dryRun: Used for testing whether the major version schemas are backward compatible or not. If schema compatibility fails, an exception would be thrown else the call would succeed but no changes will be saved. This parameter is optional.
    ///   - publishedSchemaArn: The revision of the published schema to upgrade the directory to.
    ///   - logger: Logger use during operation
    @inlinable
    public func upgradeAppliedSchema(
        directoryArn: String,
        dryRun: Bool? = nil,
        publishedSchemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpgradeAppliedSchemaResponse {
        let input = UpgradeAppliedSchemaRequest(
            directoryArn: directoryArn, 
            dryRun: dryRun, 
            publishedSchemaArn: publishedSchemaArn
        )
        return try await self.upgradeAppliedSchema(input, logger: logger)
    }

    /// Upgrades a published schema under a new minor version revision using the current contents of DevelopmentSchemaArn.
    @Sendable
    @inlinable
    public func upgradePublishedSchema(_ input: UpgradePublishedSchemaRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpgradePublishedSchemaResponse {
        try await self.client.execute(
            operation: "UpgradePublishedSchema", 
            path: "/amazonclouddirectory/2017-01-11/schema/upgradepublished", 
            httpMethod: .PUT, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Upgrades a published schema under a new minor version revision using the current contents of DevelopmentSchemaArn.
    ///
    /// Parameters:
    ///   - developmentSchemaArn: The ARN of the development schema with the changes used for the upgrade.
    ///   - dryRun: Used for testing whether the Development schema provided is backwards compatible, or not, with the publish schema provided by the user to be upgraded. If schema compatibility fails, an exception would be thrown else the call would succeed. This parameter is optional and defaults to false.
    ///   - minorVersion: Identifies the minor version of the published schema that will be created. This parameter is NOT optional.
    ///   - publishedSchemaArn: The ARN of the published schema to be upgraded.
    ///   - logger: Logger use during operation
    @inlinable
    public func upgradePublishedSchema(
        developmentSchemaArn: String,
        dryRun: Bool? = nil,
        minorVersion: String,
        publishedSchemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpgradePublishedSchemaResponse {
        let input = UpgradePublishedSchemaRequest(
            developmentSchemaArn: developmentSchemaArn, 
            dryRun: dryRun, 
            minorVersion: minorVersion, 
            publishedSchemaArn: publishedSchemaArn
        )
        return try await self.upgradePublishedSchema(input, logger: logger)
    }
}

extension CloudDirectory {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: CloudDirectory, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension CloudDirectory {
    /// Return PaginatorSequence for operation ``listAppliedSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppliedSchemaArnsPaginator(
        _ input: ListAppliedSchemaArnsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAppliedSchemaArnsRequest, ListAppliedSchemaArnsResponse> {
        return .init(
            input: input,
            command: self.listAppliedSchemaArns,
            inputKey: \ListAppliedSchemaArnsRequest.nextToken,
            outputKey: \ListAppliedSchemaArnsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAppliedSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - directoryArn: The ARN of the directory you are listing.
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - schemaArn: The response for ListAppliedSchemaArns when this parameter is used will list all minor version ARNs for a major version.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAppliedSchemaArnsPaginator(
        directoryArn: String,
        maxResults: Int? = nil,
        schemaArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAppliedSchemaArnsRequest, ListAppliedSchemaArnsResponse> {
        let input = ListAppliedSchemaArnsRequest(
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            schemaArn: schemaArn
        )
        return self.listAppliedSchemaArnsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAttachedIndices(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAttachedIndicesPaginator(
        _ input: ListAttachedIndicesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAttachedIndicesRequest, ListAttachedIndicesResponse> {
        return .init(
            input: input,
            command: self.listAttachedIndices,
            inputKey: \ListAttachedIndicesRequest.nextToken,
            outputKey: \ListAttachedIndicesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAttachedIndices(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: The consistency level to use for this operation.
    ///   - directoryArn: The ARN of the directory.
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - targetReference: A reference to the object that has indices attached.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAttachedIndicesPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        targetReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAttachedIndicesRequest, ListAttachedIndicesResponse> {
        let input = ListAttachedIndicesRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            targetReference: targetReference
        )
        return self.listAttachedIndicesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDevelopmentSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDevelopmentSchemaArnsPaginator(
        _ input: ListDevelopmentSchemaArnsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDevelopmentSchemaArnsRequest, ListDevelopmentSchemaArnsResponse> {
        return .init(
            input: input,
            command: self.listDevelopmentSchemaArns,
            inputKey: \ListDevelopmentSchemaArnsRequest.nextToken,
            outputKey: \ListDevelopmentSchemaArnsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDevelopmentSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDevelopmentSchemaArnsPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDevelopmentSchemaArnsRequest, ListDevelopmentSchemaArnsResponse> {
        let input = ListDevelopmentSchemaArnsRequest(
            maxResults: maxResults
        )
        return self.listDevelopmentSchemaArnsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDirectories(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDirectoriesPaginator(
        _ input: ListDirectoriesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDirectoriesRequest, ListDirectoriesResponse> {
        return .init(
            input: input,
            command: self.listDirectories,
            inputKey: \ListDirectoriesRequest.nextToken,
            outputKey: \ListDirectoriesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDirectories(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - state: The state of the directories in the list. Can be either Enabled, Disabled, or Deleted.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDirectoriesPaginator(
        maxResults: Int? = nil,
        state: DirectoryState? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDirectoriesRequest, ListDirectoriesResponse> {
        let input = ListDirectoriesRequest(
            maxResults: maxResults, 
            state: state
        )
        return self.listDirectoriesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFacetAttributes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFacetAttributesPaginator(
        _ input: ListFacetAttributesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFacetAttributesRequest, ListFacetAttributesResponse> {
        return .init(
            input: input,
            command: self.listFacetAttributes,
            inputKey: \ListFacetAttributesRequest.nextToken,
            outputKey: \ListFacetAttributesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFacetAttributes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - name: The name of the facet whose attributes will be retrieved.
    ///   - schemaArn: The ARN of the schema where the facet resides.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFacetAttributesPaginator(
        maxResults: Int? = nil,
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFacetAttributesRequest, ListFacetAttributesResponse> {
        let input = ListFacetAttributesRequest(
            maxResults: maxResults, 
            name: name, 
            schemaArn: schemaArn
        )
        return self.listFacetAttributesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFacetNames(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFacetNamesPaginator(
        _ input: ListFacetNamesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFacetNamesRequest, ListFacetNamesResponse> {
        return .init(
            input: input,
            command: self.listFacetNames,
            inputKey: \ListFacetNamesRequest.nextToken,
            outputKey: \ListFacetNamesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFacetNames(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - schemaArn: The Amazon Resource Name (ARN) to retrieve facet names from.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFacetNamesPaginator(
        maxResults: Int? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFacetNamesRequest, ListFacetNamesResponse> {
        let input = ListFacetNamesRequest(
            maxResults: maxResults, 
            schemaArn: schemaArn
        )
        return self.listFacetNamesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listIndex(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexPaginator(
        _ input: ListIndexRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListIndexRequest, ListIndexResponse> {
        return .init(
            input: input,
            command: self.listIndex,
            inputKey: \ListIndexRequest.nextToken,
            outputKey: \ListIndexResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listIndex(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: The consistency level to execute the request at.
    ///   - directoryArn: The ARN of the directory that the index exists in.
    ///   - indexReference: The reference to the index to list.
    ///   - maxResults: The maximum number of objects in a single page to retrieve from the index during a request. For more information, see Amazon Cloud Directory Limits.
    ///   - rangesOnIndexedValues: Specifies the ranges of indexed values that you want to query.
    ///   - logger: Logger used for logging
    @inlinable
    public func listIndexPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        indexReference: ObjectReference,
        maxResults: Int? = nil,
        rangesOnIndexedValues: [ObjectAttributeRange]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListIndexRequest, ListIndexResponse> {
        let input = ListIndexRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            indexReference: indexReference, 
            maxResults: maxResults, 
            rangesOnIndexedValues: rangesOnIndexedValues
        )
        return self.listIndexPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listManagedSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listManagedSchemaArnsPaginator(
        _ input: ListManagedSchemaArnsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListManagedSchemaArnsRequest, ListManagedSchemaArnsResponse> {
        return .init(
            input: input,
            command: self.listManagedSchemaArns,
            inputKey: \ListManagedSchemaArnsRequest.nextToken,
            outputKey: \ListManagedSchemaArnsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listManagedSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - schemaArn: The response for ListManagedSchemaArns. When this parameter is used, all minor version ARNs for a major version are listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listManagedSchemaArnsPaginator(
        maxResults: Int? = nil,
        schemaArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListManagedSchemaArnsRequest, ListManagedSchemaArnsResponse> {
        let input = ListManagedSchemaArnsRequest(
            maxResults: maxResults, 
            schemaArn: schemaArn
        )
        return self.listManagedSchemaArnsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listObjectAttributes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectAttributesPaginator(
        _ input: ListObjectAttributesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListObjectAttributesRequest, ListObjectAttributesResponse> {
        return .init(
            input: input,
            command: self.listObjectAttributes,
            inputKey: \ListObjectAttributesRequest.nextToken,
            outputKey: \ListObjectAttributesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listObjectAttributes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - facetFilter: Used to filter the list of object attributes that are associated with a certain facet.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - objectReference: The reference that identifies the object whose attributes will be listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectAttributesPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        facetFilter: SchemaFacet? = nil,
        maxResults: Int? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListObjectAttributesRequest, ListObjectAttributesResponse> {
        let input = ListObjectAttributesRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            facetFilter: facetFilter, 
            maxResults: maxResults, 
            objectReference: objectReference
        )
        return self.listObjectAttributesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listObjectChildren(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectChildrenPaginator(
        _ input: ListObjectChildrenRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListObjectChildrenRequest, ListObjectChildrenResponse> {
        return .init(
            input: input,
            command: self.listObjectChildren,
            inputKey: \ListObjectChildrenRequest.nextToken,
            outputKey: \ListObjectChildrenResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listObjectChildren(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - objectReference: The reference that identifies the object for which child objects are being listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectChildrenPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListObjectChildrenRequest, ListObjectChildrenResponse> {
        let input = ListObjectChildrenRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            objectReference: objectReference
        )
        return self.listObjectChildrenPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listObjectParentPaths(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectParentPathsPaginator(
        _ input: ListObjectParentPathsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListObjectParentPathsRequest, ListObjectParentPathsResponse> {
        return .init(
            input: input,
            command: self.listObjectParentPaths,
            inputKey: \ListObjectParentPathsRequest.nextToken,
            outputKey: \ListObjectParentPathsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listObjectParentPaths(_:logger:)``.
    ///
    /// - Parameters:
    ///   - directoryArn: The ARN of the directory to which the parent path applies.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - objectReference: The reference that identifies the object whose parent paths are listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectParentPathsPaginator(
        directoryArn: String,
        maxResults: Int? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListObjectParentPathsRequest, ListObjectParentPathsResponse> {
        let input = ListObjectParentPathsRequest(
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            objectReference: objectReference
        )
        return self.listObjectParentPathsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listObjectParents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectParentsPaginator(
        _ input: ListObjectParentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListObjectParentsRequest, ListObjectParentsResponse> {
        return .init(
            input: input,
            command: self.listObjectParents,
            inputKey: \ListObjectParentsRequest.nextToken,
            outputKey: \ListObjectParentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listObjectParents(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where the object resides. For more information, see arns.
    ///   - includeAllLinksToEachParent: When set to True, returns all ListObjectParentsResponse$ParentLinks. There could be multiple links between a parent-child pair.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - objectReference: The reference that identifies the object for which parent objects are being listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectParentsPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        includeAllLinksToEachParent: Bool? = nil,
        maxResults: Int? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListObjectParentsRequest, ListObjectParentsResponse> {
        let input = ListObjectParentsRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            includeAllLinksToEachParent: includeAllLinksToEachParent, 
            maxResults: maxResults, 
            objectReference: objectReference
        )
        return self.listObjectParentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listObjectPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectPoliciesPaginator(
        _ input: ListObjectPoliciesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListObjectPoliciesRequest, ListObjectPoliciesResponse> {
        return .init(
            input: input,
            command: self.listObjectPolicies,
            inputKey: \ListObjectPoliciesRequest.nextToken,
            outputKey: \ListObjectPoliciesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listObjectPolicies(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - objectReference: Reference that identifies the object for which policies will be listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listObjectPoliciesPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListObjectPoliciesRequest, ListObjectPoliciesResponse> {
        let input = ListObjectPoliciesRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            objectReference: objectReference
        )
        return self.listObjectPoliciesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPolicyAttachments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPolicyAttachmentsPaginator(
        _ input: ListPolicyAttachmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPolicyAttachmentsRequest, ListPolicyAttachmentsResponse> {
        return .init(
            input: input,
            command: self.listPolicyAttachments,
            inputKey: \ListPolicyAttachmentsRequest.nextToken,
            outputKey: \ListPolicyAttachmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPolicyAttachments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - consistencyLevel: Represents the manner and timing in which the successful write or update of an object is reflected in a subsequent read operation of that same object.
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory where objects reside. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - policyReference: The reference that identifies the policy object.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPolicyAttachmentsPaginator(
        consistencyLevel: ConsistencyLevel? = nil,
        directoryArn: String,
        maxResults: Int? = nil,
        policyReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPolicyAttachmentsRequest, ListPolicyAttachmentsResponse> {
        let input = ListPolicyAttachmentsRequest(
            consistencyLevel: consistencyLevel, 
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            policyReference: policyReference
        )
        return self.listPolicyAttachmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPublishedSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPublishedSchemaArnsPaginator(
        _ input: ListPublishedSchemaArnsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPublishedSchemaArnsRequest, ListPublishedSchemaArnsResponse> {
        return .init(
            input: input,
            command: self.listPublishedSchemaArns,
            inputKey: \ListPublishedSchemaArnsRequest.nextToken,
            outputKey: \ListPublishedSchemaArnsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPublishedSchemaArns(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - schemaArn: The response for ListPublishedSchemaArns when this parameter is used will list all minor version ARNs for a major version.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPublishedSchemaArnsPaginator(
        maxResults: Int? = nil,
        schemaArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPublishedSchemaArnsRequest, ListPublishedSchemaArnsResponse> {
        let input = ListPublishedSchemaArnsRequest(
            maxResults: maxResults, 
            schemaArn: schemaArn
        )
        return self.listPublishedSchemaArnsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        _ input: ListTagsForResourceRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResponse> {
        return .init(
            input: input,
            command: self.listTagsForResource,
            inputKey: \ListTagsForResourceRequest.nextToken,
            outputKey: \ListTagsForResourceResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The MaxResults parameter sets the maximum number of results returned in a single page. This is for future use and is not supported currently.
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource. Tagging is only supported for directories.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        maxResults: Int? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResponse> {
        let input = ListTagsForResourceRequest(
            maxResults: maxResults, 
            resourceArn: resourceArn
        )
        return self.listTagsForResourcePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTypedLinkFacetAttributes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTypedLinkFacetAttributesPaginator(
        _ input: ListTypedLinkFacetAttributesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTypedLinkFacetAttributesRequest, ListTypedLinkFacetAttributesResponse> {
        return .init(
            input: input,
            command: self.listTypedLinkFacetAttributes,
            inputKey: \ListTypedLinkFacetAttributesRequest.nextToken,
            outputKey: \ListTypedLinkFacetAttributesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTypedLinkFacetAttributes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - name: The unique name of the typed link facet.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTypedLinkFacetAttributesPaginator(
        maxResults: Int? = nil,
        name: String,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTypedLinkFacetAttributesRequest, ListTypedLinkFacetAttributesResponse> {
        let input = ListTypedLinkFacetAttributesRequest(
            maxResults: maxResults, 
            name: name, 
            schemaArn: schemaArn
        )
        return self.listTypedLinkFacetAttributesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTypedLinkFacetNames(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTypedLinkFacetNamesPaginator(
        _ input: ListTypedLinkFacetNamesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTypedLinkFacetNamesRequest, ListTypedLinkFacetNamesResponse> {
        return .init(
            input: input,
            command: self.listTypedLinkFacetNames,
            inputKey: \ListTypedLinkFacetNamesRequest.nextToken,
            outputKey: \ListTypedLinkFacetNamesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTypedLinkFacetNames(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to retrieve.
    ///   - schemaArn: The Amazon Resource Name (ARN) that is associated with the schema. For more information, see arns.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTypedLinkFacetNamesPaginator(
        maxResults: Int? = nil,
        schemaArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTypedLinkFacetNamesRequest, ListTypedLinkFacetNamesResponse> {
        let input = ListTypedLinkFacetNamesRequest(
            maxResults: maxResults, 
            schemaArn: schemaArn
        )
        return self.listTypedLinkFacetNamesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``lookupPolicy(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func lookupPolicyPaginator(
        _ input: LookupPolicyRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<LookupPolicyRequest, LookupPolicyResponse> {
        return .init(
            input: input,
            command: self.lookupPolicy,
            inputKey: \LookupPolicyRequest.nextToken,
            outputKey: \LookupPolicyResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``lookupPolicy(_:logger:)``.
    ///
    /// - Parameters:
    ///   - directoryArn: The Amazon Resource Name (ARN) that is associated with the Directory. For more information, see arns.
    ///   - maxResults: The maximum number of items to be retrieved in a single call. This is an approximate number.
    ///   - objectReference: Reference that identifies the object whose policies will be looked up.
    ///   - logger: Logger used for logging
    @inlinable
    public func lookupPolicyPaginator(
        directoryArn: String,
        maxResults: Int? = nil,
        objectReference: ObjectReference,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<LookupPolicyRequest, LookupPolicyResponse> {
        let input = LookupPolicyRequest(
            directoryArn: directoryArn, 
            maxResults: maxResults, 
            objectReference: objectReference
        )
        return self.lookupPolicyPaginator(input, logger: logger)
    }
}

extension CloudDirectory.ListAppliedSchemaArnsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListAppliedSchemaArnsRequest {
        return .init(
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.ListAttachedIndicesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListAttachedIndicesRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            targetReference: self.targetReference
        )
    }
}

extension CloudDirectory.ListDevelopmentSchemaArnsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListDevelopmentSchemaArnsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension CloudDirectory.ListDirectoriesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListDirectoriesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            state: self.state
        )
    }
}

extension CloudDirectory.ListFacetAttributesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListFacetAttributesRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.ListFacetNamesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListFacetNamesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.ListIndexRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListIndexRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            indexReference: self.indexReference,
            maxResults: self.maxResults,
            nextToken: token,
            rangesOnIndexedValues: self.rangesOnIndexedValues
        )
    }
}

extension CloudDirectory.ListManagedSchemaArnsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListManagedSchemaArnsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.ListObjectAttributesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListObjectAttributesRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            facetFilter: self.facetFilter,
            maxResults: self.maxResults,
            nextToken: token,
            objectReference: self.objectReference
        )
    }
}

extension CloudDirectory.ListObjectChildrenRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListObjectChildrenRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            objectReference: self.objectReference
        )
    }
}

extension CloudDirectory.ListObjectParentPathsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListObjectParentPathsRequest {
        return .init(
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            objectReference: self.objectReference
        )
    }
}

extension CloudDirectory.ListObjectParentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListObjectParentsRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            includeAllLinksToEachParent: self.includeAllLinksToEachParent,
            maxResults: self.maxResults,
            nextToken: token,
            objectReference: self.objectReference
        )
    }
}

extension CloudDirectory.ListObjectPoliciesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListObjectPoliciesRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            objectReference: self.objectReference
        )
    }
}

extension CloudDirectory.ListPolicyAttachmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListPolicyAttachmentsRequest {
        return .init(
            consistencyLevel: self.consistencyLevel,
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            policyReference: self.policyReference
        )
    }
}

extension CloudDirectory.ListPublishedSchemaArnsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListPublishedSchemaArnsRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.ListTagsForResourceRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListTagsForResourceRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension CloudDirectory.ListTypedLinkFacetAttributesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListTypedLinkFacetAttributesRequest {
        return .init(
            maxResults: self.maxResults,
            name: self.name,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.ListTypedLinkFacetNamesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.ListTypedLinkFacetNamesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token,
            schemaArn: self.schemaArn
        )
    }
}

extension CloudDirectory.LookupPolicyRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> CloudDirectory.LookupPolicyRequest {
        return .init(
            directoryArn: self.directoryArn,
            maxResults: self.maxResults,
            nextToken: token,
            objectReference: self.objectReference
        )
    }
}
